package 笔试;

public class 寻找峰值2 {
    int[] pos = new int[2];

    public int[] findPeakGrid(int[][] mat) {
        dfs(mat, 0, 0);
        return pos;
    }

    public boolean dfs(int[][] mat, int i, int j){
        // 边界校验
        if(i < 0 || j < 0 || i > mat.length - 1 || j > mat[i].length - 1)
            return false;

        // 先校验峰值 => 若不是峰值，向下dfs => 若找不到，再向右dfs。

        return check(mat, i, j) || dfs(mat, i + 1, j) || dfs(mat, i, j + 1);

    }

    boolean check(int[][] mat, int i, int j){
        //峰值校验
        if(i-1 >= 0 && mat[i-1][j]>mat[i][j]) return false;
        if(j-1 >= 0 && mat[i][j-1]>mat[i][j]) return false;
        if(i+1 < mat.length && mat[i+1][j]> mat[i][j]) return false;
        if(j+1 < mat[0].length && mat[i][j+1] > mat[i][j]) return false;

        // 找到峰值
        pos[0] = i;
        pos[1] = j;
        return true;

    }

}
